Skip to main content

APU 高性能计算服务器使用手册(V1.0)

目录:

1. 模型训练

训练过程不仅包括连续神经网络(Continuous Neural Network, CNN)训练,还包括使用CNN结果作为输入的量化神经网络(Quantized Neural Network, QNN)训练。这一过程通过使用我们在线开源的训练代码在CPU或GPU上执行。

为了训练一个能够很好地再现势能面(Potential Energy Surface, PES)的机器学习(Machine Learning, ML)模型,首先准备一个训练和测试数据集,这可以通过使用基于密度泛函理论(Density Functional Theory, DFT)的从头计算分子动力学(Ab-initio Molecular Dynamics, AIMD)采样来实现。

mkdir -p $train_workspace
cd $train_workspace
mkdir -p data
cp -r $dataset data

其中$dataset是数据集及测试集的路径,$train_workspace是训练工作目录路径。

A. 训练文件参数介绍

训练文件参数有以下几部分:

{
"apu": {},
"learning_rate": {},
"loss": {},
"training": {}
}

接下来将分别介绍各部分参数。

a) apu参数

{
"version": 1,
"max_nnei": 256,
"net_size": 128,
"sel": 256,
"rcut": 6.0,
"rcut_smth": 0.5,
"type_map": ["Ge", "Te"]
}
参数说明可选值
version神经网络结构版本1
net_size神经网络大小128
sel相邻原子数256
rcut截断半径(0.0, 8.0]
rcut_smth平滑截断半径(0.0, 8.0)
type_map将原子种类映射到种类名称string list类型,如["Ge", "Te"]

b) learning_rate参数

{
"type": "exp",
"start_lr": 1e-3,
"stop_lr": 3e-8,
"decay_steps": 5000
}
参数说明可选值
type学习率变化类型exp
start_lr训练开始时学习率合适的值
stop_lr训练结束时学习率合适的值
decay_steps每decay_steps步学习率衰减合适的值

c) loss参数

{
"start_pref_e": 0.02,
"limit_pref_e": 2,
"start_pref_f": 1000,
"limit_pref_f": 1,
"start_pref_v": 0,
"limit_pref_v": 0
}
参数说明可选值
start_pref_e训练开始时能量的损失因子0或合适的值
limit_pref_e训练结束时能量的损失因子0或合适的值
start_pref_f训练开始时受力的损失因子0或合适的值
limit_pref_f训练结束时受力的损失因子0或合适的值
start_pref_v训练开始时维里的损失因子0或合适的值
limit_pref_v训练结束时维里的损失因子0或合适的值

d) training参数

{
"seed": 1,
"stop_batch": 1000000,
"numb_test": 1,
"disp_file": "lcurve.out",
"disp_freq": 1000,
"save_ckpt": "model.ckpt",
"save_freq": 10000,
"training_data": {
"systems": ["system1_path", "system2_path", "..."],
"batch_size": ["batch_size_of_system1", "batch_size_of_system2", "..."]
}
}
参数说明可选值
seed随机种子整数值
stop_batch训练总步数合适的值
numb_test训练时评估准确率样本数合适的值
disp_file存储训练信息的日志文件名称字符串名称
disp_freq训练信息输出频率合适的值
save_ckpt检查点文件的名称字符串名称
save_freq检查点文件的保存频率0或合适的值
systems包含数据集的数据目录列表字符串列表
batch_size相应数据集的批大小列表内容为整数的字符串列表

B. 配置训练文件

进入训练工作目录

cd $train_workspace

创建输入脚本train_cnn.jsontrain_qnn.json

touch train_cnn.json
touch train_qnn.json

编辑并配置好训练文件参数。

C. 训练并测试

训练步骤分为两步:

cd $train_workspace
# step1: train CNN
dp train-apu train_cnn.json -s s1
# step2: train QNN
dp train-apu train_qnn.json -s s2

训练过程结束后,将得到两个文件夹:apu_cnnapu_qnnapu_cnn包含连续神经网络(CNN)训练后的模型。apu_qnn包含量化神经网络(QNN)训练后的模型。

可以通过以下方式从检查点文件的路径(apu_cnn/model.ckpt)重新启动CNN训练:

dp train-apu train_cnn.json -r apu_cnn/model.ckpt -s s1

或者还可以初始化CNN模型并通过以下方式对其进行训练:

mv apu_cnn apu_cnn_bck
cp train_cnn.json train_cnn2.json
# please edit train_cnn2.json
dp train-apu train_cnn2.json -s s1 -i apu_cnn_bck/model.ckpt

冻结模型可以以多种方式使用。最直接的测试可以通过以下方式调用:

mkdir test
dp test -m ./apu_qnn/frozen_model.pb -s path/to/system -d ./test/detail -n 99999 -l test/output.log

其中,要导入的冻结模型文件是在命令行通过-m标志给出的,测试数据集的路径是在命令行通过-s标志给出的,包含能量、力和维里精度详细信息的文件是在命令行通过-d标记给定的,测试的数据量是在命令行通过-n标志给定的。

D. 训练注意事项

  1. 可以通过以下命令获取apu帮助说明
dp train-apu -h
  1. 推荐在QNN量化训练时跳过相邻统计
dp train-apu train_qnn.json -s s2 --skip-neighbor-stat
  1. QNN输入脚本(train_qnn.json)中运行步数(stop_batch)设置为1步即可

2. 运行

A. 准备条件

建立lammps运行工作目录并进入

mkdir $md_workspace
cd $md_workspace

将训练得到的模型文件拷贝至lammps运行工作目录

cp $train_workspace/apu_cnn/model.pb ./

将lammps输入文件拷贝至lammps运行工作目录

cp -r $lammps_input/* ./

其中$md_workspace是lammps运行工作目录路径,$lammps_input是lammps输入文件路径

B. 输入文件说明

在lammps输入脚本中,需要将势函数部分进行修改,修改如下:

pair_style apu model.pb -n num_fpga_card -o sequence_fpga_card
pair_coeff * *

其中势函数部分通过加入标志可调用1张FPGA卡或者2张FPGA卡,以及调用一张FPGA卡时的顺序。

参数说明可选值
num_fpga_card调用的FPGA卡数量1或2
sequence_fpga_cardFPGA卡调用顺序01或10

C. 运行分子动力学

使用mpi多核运行分子动力学(Molecular Dynamics, MD)

sudo mpirun -n $num_cores $lmp_path -i lammps.in

其中$num_cores为使用的核数,$lmp_path为lammps的路径,lammps.in为lammps输入文件

D. 注意事项

运行MD时输入体系的原子数不同时,推荐使用以下mpi核数设置时的MD效率更高

体系原子数范围mpi推荐使用核数
0~100001或2
>100004或8

3. 测试示例

测试示例部分结合GeTe的例子介绍了使用APU主机进行计算的完整流程,可通过百度网盘获取GeTe算例的训练与测试数据以及训练文件和lammps输入文件。

APU主机的密码为:nvnmd ,进入桌面后,~/Desktop/路径下example/为GeTe算例训练与测试的目录,example_ref/为GeTe算例训练和测试的参考结果。

A. 配置加速卡

APU主机每次开机后,需在终端键入如下指令对FPGA加速卡进行配置

sudo load_pcie.sh i

输入密码后完成对加速卡的配置。

alt text

B. 训练

查看example/路径下内容,其中train/为训练文件夹,GeTe_APU/为测试文件夹。

使用cd指令进入训练文件夹,该目录下data/为GeTe算例的训练数据集,train_cnn.jsontrain_qnn.json分别为CNN和QNN模型的训练脚本,脚本中的参数在第一节中有详细的介绍。

alt text

键入如下指令激活APU环境

conda activate apu

将conda环境由base切换为apu,输入CNN训练指令

alt text

CNN训练完成后继续训练QNN

alt text

训练结束后,训练目录中文件如下,train_cnntrain_qnn分别包含CNN和QNN的训练过程文件和结果文件。

alt text

C. 测试

进入~/Desktop/example/GeTe_APU/测试目录下,将上述train_qnn/目录下QNN训练最终得到的模型model.pb拷贝到GeTe_APU/,该目录下包含lammps输入文件、GeTe坐标文件、APU模型文件。

alt text

使用mpi多核运行分子动力学

alt text

执行完毕后可在log.lammps中查看输出信息。

alt text